/**
 * 
 */
package com.cplsystems.incidencias.vm.personal.utils;

import java.util.List;

import org.zkoss.bind.annotation.BindingParam;
import org.zkoss.bind.annotation.Command;
import org.zkoss.bind.annotation.ContextParam;
import org.zkoss.bind.annotation.ContextType;
import org.zkoss.bind.annotation.ExecutionArgParam;
import org.zkoss.bind.annotation.Init;
import org.zkoss.bind.annotation.NotifyChange;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.select.Selectors;
import org.zkoss.zk.ui.select.annotation.VariableResolver;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Window;

import com.cplsystems.incidencias.business.ReferenciasPersonales;

/**
 * @author César Palalía López (csr.plz@aisa-automation.com)
 * 
 */
@VariableResolver(org.zkoss.zkplus.spring.DelegatingVariableResolver.class)
public class ReferenciasPersonalesVM {

	@Wire("#referenciasPersonalesWindow")
	private Window referenciasPersonalesWindow;
	private List<ReferenciasPersonales> referenciasPersonales;
	private ReferenciasPersonales nuevaReferenciasPersonales = new ReferenciasPersonales();
	private ReferenciasPersonales referenciasPersonalesSeleccionada = new ReferenciasPersonales();

	@Init
	public void init(
			@ContextParam(ContextType.VIEW) Component view,
			@ExecutionArgParam("referenciasPersonales") List<ReferenciasPersonales> referenciasPersonales) {
		Selectors.wireComponents(view, this, false);
		this.referenciasPersonales = referenciasPersonales;
	}

	@Command
	@NotifyChange({ "nuevaReferenciasPersonales", "referenciasPersonales" })
	public void guardarReferenciaPersonal() {
		if (!referenciasPersonales.contains(nuevaReferenciasPersonales)) {
			referenciasPersonales.add(nuevaReferenciasPersonales);
		}
		nuevaReferenciasPersonales = new ReferenciasPersonales();
	}

	@Command
	@NotifyChange({ "nuevaReferenciasPersonales", "referenciasPersonales" })
	public void eliminarReferenciaPersonal() {
		if (referenciasPersonalesSeleccionada != null) {
			if (referenciasPersonales
					.contains(referenciasPersonalesSeleccionada)) {
				referenciasPersonales.remove(referenciasPersonalesSeleccionada);
				nuevaReferenciasPersonales = new ReferenciasPersonales();
			}
		}
	}

	@Command
	@NotifyChange({ "nuevaReferenciasPersonales", "referenciasPersonales" })
	public void prepareElementForEdition(
			@BindingParam("referenciasPersonales") ReferenciasPersonales referenciasPersonales) {
		if (referenciasPersonales != null) {
			this.nuevaReferenciasPersonales = referenciasPersonales;
		}
	}

	@Command
	public void closeDialog() {
		referenciasPersonalesWindow.detach();
	}

	public List<ReferenciasPersonales> getReferenciasPersonales() {
		return referenciasPersonales;
	}

	public void setReferenciasPersonales(
			List<ReferenciasPersonales> referenciasPersonales) {
		this.referenciasPersonales = referenciasPersonales;
	}

	public ReferenciasPersonales getNuevaReferenciasPersonales() {
		return nuevaReferenciasPersonales;
	}

	public void setNuevaReferenciasPersonales(
			ReferenciasPersonales nuevaReferenciasPersonales) {
		this.nuevaReferenciasPersonales = nuevaReferenciasPersonales;
	}

	public ReferenciasPersonales getReferenciasPersonalesSeleccionada() {
		return referenciasPersonalesSeleccionada;
	}

	public void setReferenciasPersonalesSeleccionada(
			ReferenciasPersonales referenciasPersonalesSeleccionada) {
		this.referenciasPersonalesSeleccionada = referenciasPersonalesSeleccionada;
	}

}
